<?php

/**
 * This is the model class for table "nomenclador.nomenclador".
 *
 * The followings are the available columns in table 'nomenclador.nomenclador':
 * @property integer $id
 * @property string $descripcion
 * @property string $fecha_inicio
 * @property string $fecha_fin
 * @property string $vigente
 * @property integer $id_tiponomenclador
 *
 * The followings are the available model relations:
 * @property TipoNomenclador $idTiponomenclador
 * @property CategoriaPrestaciones[] $categoriaPrestaciones
 */
class Nomenclador extends CActiveRecord
{
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'nomenclador.nomenclador';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('fecha_inicio, fecha_fin', 'required'),
			array('id_tiponomenclador', 'numerical', 'integerOnly'=>true),
			array('descripcion', 'length', 'max'=>255),
			array('vigente', 'length', 'max'=>1),
                        array('fecha_inicio', 'rulesFechaValida'),
                        array('fecha_fin', 'rulesFechaValida'),                    
			array('fecha_inicio', 'rulesFechaMenoresMayores'),
                    
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, descripcion, fecha_inicio, fecha_fin, vigente, id_tiponomenclador', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			   'MiTipoNomenclador' => array(self::BELONGS_TO, 'TipoNomenclador', 'id_tiponomenclador'),
                           'MisPrestaciones' => array(self::HAS_MANY, 'CategoriaPrestaciones', 'id_nomenclador'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'descripcion' => 'Descripcion',
			'fecha_inicio' => 'Fecha Inicio',
			'fecha_fin' => 'Fecha Fin',
			'vigente' => 'Vigente',
			'id_tiponomenclador' => 'Id Tiponomenclador',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('descripcion',$this->descripcion,true);
		$criteria->compare('fecha_inicio',$this->fecha_inicio,true);
		$criteria->compare('fecha_fin',$this->fecha_fin,true);
		$criteria->compare('vigente',$this->vigente,true);
		$criteria->compare('id_tiponomenclador',$this->id_tiponomenclador);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Nomenclador the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
        
        
         public static function convertirFormatoFecha($fecha){
            $fecha = explode('-',$fecha);
            $fecha = $fecha[2] ."-".$fecha[1]."-".$fecha[0];
            return $fecha;
        }
                
        
        protected function afterFind(){          
              $this->fecha_inicio =  Nomenclador::convertirFormatoFecha($this->fecha_inicio);  
              $this->fecha_fin =  Nomenclador::convertirFormatoFecha($this->fecha_fin);              
              parent::afterFind();
              return TRUE;
        }
        
         
         protected function beforeSave()
         {     $this->fecha_inicio = Nomenclador::convertirFormatoFecha($this->fecha_inicio);
               $this->fecha_fin = Nomenclador::convertirFormatoFecha($this->fecha_fin);         
               parent::beforeSave();
               return true;
         }
         
         
        /*
         * Regla de validacion para validar formato y dia de fechas.
         * 
         * Se verifica por un lado que la misma posea formato especifico de dd/mm/yyyy; y ademas que 
         * la misma sea una fecha correcta del calendario.         
         */
        
        public function rulesFechaValida($attribute,$params){
           if (empty($this->$attribute)){
             $this->addError($attribute,$attribute . 'Error!! Fecha Invalida. Complete el campo Fecha. '); 
           }           
           else{                          
             $fecha = explode("-",$this->$attribute); 
             $fecha_dia = (int)$fecha[0];
             $fecha_mes = (int)$fecha[1];
             $fecha_anio = (int)$fecha[2];
             $atributos = $this->attributeLabels();
             
             
             if (($fecha_mes < 1 || $fecha_mes > 12) )
                    $this->addError($attribute,$atributos[$attribute] . '  Error!! Fecha Invalida. La fecha tiene un formato invalido o no es correcta.'); 
             else if ($fecha_dia < 1 || $fecha_dia> 31)
                            $this->addError($attribute,$atributos[$attribute] . ' Error!! Fecha Invalida. La fecha tiene un formato invalido o no es correcta.'); 
             else if (($fecha_mes==4 || $fecha_mes==6 || $fecha_mes==9 || $fecha_mes==11) && $fecha_dia >= 31)
                        $this->addError($attribute,$atributos[$attribute] . ' Error!! Fecha Invalida. La fecha tiene un formato invalido o no es correcta.'); 
             else if ($fecha_mes == 2)
             {
                $biciesto = ($fecha_anio % 4 == 0 && ($fecha_anio % 100 != 0 || $fecha_anio % 400 == 0));
                if ($fecha_dia> 29 || ($fecha_dia ==29 && !$biciesto))
                     $this->addError($attribute,$atributos[$attribute] . ' Error!! Fecha Invalida. La fecha tiene un formato invalido o no es correcta.'); 
             }            
          }                        
       } //Fin rulesfechaValida.
       
       
       
           // Devuelve un valor logico Verdadero en el caso de que las fechas parametrizadas, el segundo
            // parametro sea mayor que el primero.
            // Se parametrizan en formatio dd-mm-yyyy
        public  static  function fechaMenorMayor($fechaMenor,$fechaMayor){
             $fechaMayor = explode('-',$fechaMayor); 
             $fechaMenor = explode('-',$fechaMenor); 
        
             $diaMayor = $fechaMayor[0];
             $mesMayor = $fechaMayor[1];
             $anioMayor = $fechaMayor[2];
             $diaMenor = $fechaMenor[0];
             $mesMenor = $fechaMenor[1];
             $anioMenor = $fechaMenor[2];
             
             if ( ($anioMayor > $anioMenor) || (($anioMayor == $anioMenor) && ($mesMayor > $mesMenor))
                 || (($anioMayor == $anioMenor) && ($mesMayor == $mesMenor) && ($diaMayor > $diaMenor)) )
                    return true;
             else
                    return false;
             
        } // FIN function fechaMenorMayor
        
        
        /*
         * Regla de validacion para validar formato y dia de fechas.
         * 
         * Se verifica por un lado que la misma posea formato especifico de dd/mm/yyyy; y ademas que 
         * la misma sea una fecha correcta del calendario.         
         */
        
        public function rulesFechaMenoresMayores($attribute,$params){
           if ((empty($this->fecha_inicio)) || (empty($this->fecha_fin))){
             $this->addError($attribute,'Error!! Fecha Invalidas. Complete las fecha de inicio y fin del nomenclador!!! '); 
           }           
           else{                          
             if (Nomenclador::fechaMenorMayor($this->fecha_fin,$this->fecha_inicio)){
                $this->addError('fecha_inicio', 'Error!! La Fecha de inicio debe ser menor a la fecha de finalizacion del nomenclador!!!'); 
                $this->addError('fecha_fin',    'Error!! La Fecha de inicio debe ser menor a la fecha de finalizacion del nomenclador!!!');
             }      
          }                        
       } //Fin rulesfechaValida.
       
       
         
       
       
       
}
